home *** CD-ROM | disk | FTP | other *** search
/ mail.altrad.com / 2015.02.mail.altrad.com.tar / mail.altrad.com / TEST / office deutch / PROPLUS.WW / PROPLSWW.CAB / MSORES.DLL / 226 / 658 < prev   
Extensible Markup Language  |  2006-10-26  |  18KB  |  435 lines

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. ***************************************************************************
  4.     dlcxsd2view.xslt
  5.     Transform that creates an scripts for Biz data fields based on an XSD. 
  6. *************************************************************************** -->
  7. <xsl:stylesheet 
  8.     version="1.0"
  9.     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  10.     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  11.     xmlns:ct="http://schemas.microsoft.com/office/2006/metadata/contentType"
  12.     xmlns:ma="http://schemas.microsoft.com/office/2006/metadata/properties/metaAttributes"
  13.     xmlns:xd="http://schemas.microsoft.com/office/infopath/2003"
  14.     xmlns:s0="http://schemas.microsoft.com/sharepoint/soap/directory/" 
  15.     xmlns:ipApp="http://schemas.microsoft.com/office/infopath/2006/XPathExtension/ipApp"
  16.     xmlns:out = "output.xsl">
  17.     <xsl:output method="text" encoding="utf-16" indent="no" />
  18.     <xsl:param name="siteUrl">[DefaultSiteUrl]</xsl:param>
  19.     <xsl:param name="fDomain">false</xsl:param>
  20.     <xsl:param name="fLocalizedTextBoxEmptyMessage">[Please type a value in the Text box to resolve.]</xsl:param>
  21.     <xsl:param name="fLocalizedErrorContactingServerMessage">[An error was encountered while trying to connect to the server.Contact your Sharepoint administrator to correct this problem.]</xsl:param>
  22.     <xsl:param name="fLocalizedNoMatchMessage">[Could not resolve specified value.]</xsl:param>
  23.     <xsl:param name="fLocalizedMultipleMatchMessage">[Multiple matches were found for the specifed value.Refine your search and try again.]</xsl:param>
  24.     <xsl:param name="fLocalizedInvalidDataMessage">[Property is invalid or corrupt.Contact your Sharepoint administrator to correct this problem.]</xsl:param>
  25.     <xsl:param name="fLocalizedDocumentNotAssociatedWithServerMessage">[Document is not associated with a server.]</xsl:param>
  26.     <xsl:param name="fLocalizedValueUnresolvedMessage">[Value is unresolved.]</xsl:param>
  27.     <xsl:param name="fLocalizedValueCouldNotBeResolvedMessage">[Value could not be resolved.]</xsl:param>
  28.     <xsl:param name="fLocalizedValueAlreadyResolvedMessage">[Value is already resolved.]</xsl:param>
  29.     <xsl:param name="fLocalizedValueCannotBeBlankMessage">[Cannot be blank]</xsl:param>
  30.     <xsl:variable name="nsDecls" select="/ct:contentTypeSchema/xsd:schema[@ma:root = 'true']/namespace::*[local-name() != 'xml']" />
  31.     <!-- Primary Template [schema dependant] -->
  32.     <xsl:template match="/">
  33.         <xsl:call-template name="NamespaceSelections" />
  34.         <xsl:choose>
  35.             <xsl:when test="$fDomain='true'">
  36.                 <xsl:call-template name="OnlineScripts" />
  37.             </xsl:when>
  38.             <xsl:otherwise>
  39.                 <xsl:call-template name="OfflineScripts" />
  40.             </xsl:otherwise>
  41.         </xsl:choose>    
  42.     </xsl:template>
  43.     <xsl:template name="NamespaceSelections">
  44. XDocument.DOM.setProperty("SelectionNamespaces",'<xsl:call-template name="Namespaces" />');     
  45.     </xsl:template>
  46.     <xsl:template name="Namespaces">
  47.         <xsl:for-each select="//xsd:schema">
  48.         <xsl:if test="local-name($nsDecls[. = current()/@targetNamespace])">
  49.             <xsl:text>xmlns:</xsl:text>
  50.             <xsl:value-of select="local-name($nsDecls[. = current()/@targetNamespace])" />
  51.             <xsl:text>="</xsl:text>
  52.             <xsl:value-of select="@targetNamespace" />
  53.             <xsl:text>" </xsl:text>
  54.         </xsl:if>
  55.         </xsl:for-each>
  56.     </xsl:template>
  57.     <xsl:template name="ResolveStatus">
  58.         <xsl:for-each select="//xsd:extension[@base='dms:BusinessDataPrimaryField']">
  59. var <xsl:value-of select="../../../@name"/>_Resolved = true;      
  60. var <xsl:value-of select="../../../@name"/>_Resolving = false;
  61. var <xsl:value-of select="../../../@name"/>_ResolvedValues = new Array();
  62.         </xsl:for-each>
  63.     </xsl:template>
  64.     <xsl:template name="OnlineScripts">
  65.         <xsl:call-template name="ResolveStatus"/>
  66.         <xsl:for-each select="//xsd:extension[@base='dms:BusinessDataPrimaryField']">
  67. function <xsl:value-of select="../../../@name" />_Resolver::OnClick(eventObj)
  68. {
  69.     var propertyNSPrefix="<xsl:call-template name="PropertyNSPrefix"/>";
  70.     var primaryFieldName="<xsl:value-of select="../../../@name" />";
  71.     var resolverWebServiceUrl = "<xsl:value-of select="$siteUrl"/>_vti_bin/BDCFieldsResolver.asmx";
  72.             <xsl:for-each select="xsd:attribute">
  73.                 <xsl:choose>
  74.                     <xsl:when test="@name='BdcField'">
  75.     var BdcField = <xsl:text>"</xsl:text><xsl:value-of select="@fixed" /><xsl:text>";</xsl:text>
  76.                     </xsl:when>
  77.                     <xsl:when test="@name='RelatedFieldWssStaticName'">
  78.     var RelatedField = <xsl:text>"</xsl:text><xsl:value-of select="@fixed" /><xsl:text>";</xsl:text>
  79.                     </xsl:when>
  80.                     <xsl:when test="@name='SecondaryFieldBdcNames'">
  81.     var SecondaryFieldBdcNames = <xsl:text>"</xsl:text><xsl:value-of select="@fixed" /><xsl:text>";</xsl:text>
  82.                     </xsl:when>
  83.                     <xsl:when test="@name='SecondaryFieldsWssStaticNames'">
  84.     var SecondaryFieldWssNames = <xsl:text>"</xsl:text><xsl:value-of select="@fixed" /><xsl:text>";</xsl:text>
  85.                     </xsl:when>
  86.                     <xsl:when test="@name='SystemInstance'">
  87.     var SystemInstance = <xsl:text>"</xsl:text><xsl:value-of select="@fixed" /><xsl:text>";</xsl:text>
  88.                     </xsl:when>
  89.                     <xsl:when test="@name='Entity'">
  90.     var Entity = <xsl:text>"</xsl:text><xsl:value-of select="@fixed" /><xsl:text>";</xsl:text>
  91.                     </xsl:when>
  92.                     <xsl:when test="@name='RelatedFieldBDCField'">
  93.     var RelatedFieldBDCField = <xsl:text>"</xsl:text><xsl:value-of select="@fixed" /><xsl:text>";</xsl:text>
  94.                     </xsl:when>
  95.                 </xsl:choose>
  96.             </xsl:for-each>
  97.     var primaryFieldValue = eventObj.Source.selectSingleNode("//"+propertyNSPrefix+":"+primaryFieldName).text;
  98.     if (primaryFieldValue == "")
  99.     {
  100.         XDocument.UI.Alert(<xsl:text>"</xsl:text><xsl:value-of select="$fLocalizedTextBoxEmptyMessage" /><xsl:text>"</xsl:text>);
  101.         return;
  102.     }
  103.     if (<xsl:value-of select="../../../@name"/>_Resolved)
  104.     {
  105.         XDocument.UI.Alert(<xsl:text>"</xsl:text><xsl:value-of select="$fLocalizedValueAlreadyResolvedMessage" /><xsl:text>"</xsl:text>);
  106.         return;
  107.     }
  108.     <xsl:value-of select="../../../@name"/>_Resolved=false;
  109.     <xsl:value-of select="../../../@name"/>_Resolving=true;
  110.     sXml = '<soap:Envelope ';
  111.     sXml += 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' ;
  112.     sXml += 'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' ;
  113.     sXml += 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' ;
  114.     sXml += '<soap:Body>' ;
  115.     sXml += '<Resolve xmlns="http://microsoft.com/webservices/SharePointPortalServer/BDCClientWS/">' ;
  116.     sXml += '<systemInstance>' + SystemInstance  + '</systemInstance>' ;
  117.     sXml += '<entity>' + Entity  + '</entity>' ;
  118.     sXml += '<valueToResolve>' + XmlEscape(primaryFieldValue) + '</valueToResolve>' ;
  119.     sXml += '<fieldNames>'+ BdcField+":"+SecondaryFieldBdcNames  + '</fieldNames>' ;
  120.     sXml += "</Resolve></soap:Body></soap:Envelope>";
  121.     var xmlHTTP = new ActiveXObject("Msxml2.XMLHTTP") ;
  122.     xmlHTTP.Open ( "Post", resolverWebServiceUrl, false) ;
  123.     xmlHTTP.setRequestHeader("SOAPAction", "http://microsoft.com/webservices/SharePointPortalServer/BDCClientWS/Resolve") ;
  124.     var xmlObj = new ActiveXObject("Msxml2.DOMDocument") ;
  125.     try
  126.     {
  127.         xmlObj.loadXML(sXml) ;
  128.         xmlHTTP.Send(xmlObj) ;
  129.         xmlObj = new ActiveXObject("Msxml2.DOMDocument") ;
  130.         xmlObj.loadXML(xmlHTTP.responseText) ;        
  131.     }
  132.     catch(e)
  133.     {    
  134.         XDocument.UI.Alert(<xsl:text>"</xsl:text><xsl:value-of select="$fLocalizedErrorContactingServerMessage" /><xsl:text>"</xsl:text>);
  135.         <xsl:value-of select="../../../@name" />_RestoreResolvedValues(eventObj);
  136.         <xsl:value-of select="../../../@name"/>_Resolving=false;
  137.         return;
  138.     }
  139.     var allFields = primaryFieldName+":"+SecondaryFieldWssNames;
  140.     var boundNodes =allFields.split(":");
  141.     var allBDCFields=BdcField+":"+SecondaryFieldBdcNames;
  142.     var bdcFields=allBDCFields.split(":");
  143.     var status = xmlObj.selectSingleNode("//Status").text;
  144.     if (status == "UniqueMatch")
  145.     {
  146.         <xsl:value-of select="../../../@name"/>_Resolved=true;
  147.         for (fieldCount=0;fieldCount<boundNodes.length;fieldCount++)
  148.         {
  149.             var objElement = eventObj.Source.selectSingleNode("//"+propertyNSPrefix+":"+boundNodes[fieldCount]);
  150.             var value = xmlObj.selectSingleNode("//FieldRecord[@FieldName='"+bdcFields[fieldCount]+"']").text;
  151.             SetValue(objElement,value);
  152.         }
  153.         var idElement = eventObj.Source.selectSingleNode("//"+propertyNSPrefix+":"+RelatedField);
  154.         var idValue = xmlObj.selectSingleNode("//Identifier").text;
  155.         SetValue(idElement,idValue);
  156.     }
  157.     else if (status == "NoMatch")
  158.     {
  159.         XDocument.UI.Alert(<xsl:text>"</xsl:text><xsl:value-of select="$fLocalizedNoMatchMessage" /><xsl:text>"</xsl:text>);
  160.         <xsl:value-of select="../../../@name" />_RestoreResolvedValues(eventObj);
  161.     }
  162.     else if (status == "MultipleMatch")
  163.     {
  164.         XDocument.UI.Alert(<xsl:text>"</xsl:text><xsl:value-of select="$fLocalizedMultipleMatchMessage" /><xsl:text>"</xsl:text>);
  165.         <xsl:value-of select="../../../@name" />_RestoreResolvedValues(eventObj);
  166.     }
  167.     else
  168.     {
  169.         XDocument.UI.Alert(<xsl:text>"</xsl:text><xsl:value-of select="$fLocalizedInvalidDataMessage" /><xsl:text>"</xsl:text>);
  170.         <xsl:value-of select="../../../@name" />_RestoreResolvedValues(eventObj);
  171.     }
  172.     <xsl:value-of select="../../../@name"/>_Resolving=false;
  173. }
  174. function XmlEscape(input)
  175. {
  176.     var output = input.replace(/&/g,'&amp;');
  177.     output = output.replace(/"/g,'&quot;');
  178.     output = output.replace(/>/g,'&gt;');
  179.     output = output.replace(/</g,'&lt;');
  180.     return output;
  181. }
  182. function SetValue(objElement,value)
  183. {
  184.     StripXsiNil(objElement);
  185.     objElement.text = value;
  186. }
  187. function <xsl:value-of select="../../../@name" />_Validator::OnBeforeChange(eventObj)
  188. {
  189.     if ((eventObj.IsUndoRedo) || (eventObj.Operation == "Delete"))
  190.     {
  191.         return;
  192.     }
  193.     if (eventObj.Site != eventObj.Parent)
  194.     {
  195.         return;
  196.     }
  197.     if (eventObj.Source.nodeType != 3)
  198.     {
  199.         return;
  200.     }
  201.     if (!<xsl:value-of select="../../../@name"/>_Resolving)
  202.     {
  203.         if (<xsl:value-of select="../../../@name"/>_Resolved)
  204.         {
  205.             <xsl:value-of select="../../../@name" />_SaveResolvedValues(eventObj);
  206.         }
  207.         <xsl:value-of select="../../../@name"/>_Resolved = false;
  208.     }
  209. }
  210. function <xsl:value-of select="../../../@name" />_RestoreResolvedValues(eventObj)
  211. {    
  212.     var dontRestore = true;
  213.     if (dontRestore)
  214.     {
  215.         return;
  216.     }
  217.     var restore = XDocument.UI.Confirm("Do you want to restore last known resolved values?",4);
  218.     if (restore == 6)
  219.     {
  220.         <xsl:value-of select="../../../@name"/>_Resolved=true;
  221.         var propertyNSPrefix="<xsl:call-template name="PropertyNSPrefix"/>";
  222.         var primaryFieldName="<xsl:value-of select="../../../@name" />";
  223.                 <xsl:for-each select="xsd:attribute">
  224.                     <xsl:choose>                    
  225.                         <xsl:when test="@name='RelatedFieldWssStaticName'">
  226.         var RelatedField = <xsl:text>"</xsl:text><xsl:value-of select="@fixed" /><xsl:text>";</xsl:text>
  227.                         </xsl:when>                    
  228.                         <xsl:when test="@name='SecondaryFieldsWssStaticNames'">
  229.         var SecondaryFieldWssNames = <xsl:text>"</xsl:text><xsl:value-of select="@fixed" /><xsl:text>";</xsl:text>
  230.                         </xsl:when>                    
  231.                     </xsl:choose>
  232.                 </xsl:for-each>
  233.         var allFields = primaryFieldName+":"+RelatedField+":"+SecondaryFieldWssNames;
  234.         var boundNodes =allFields.split(":");
  235.         for (fieldCount=0;fieldCount<boundNodes.length;fieldCount++)
  236.         {
  237.             var objElement = eventObj.Source.selectSingleNode("//"+propertyNSPrefix+":"+boundNodes[fieldCount]);
  238.             SetValue(objElement,<xsl:value-of select="../../../@name"/>_ResolvedValues[fieldCount]);
  239.         }        
  240.     }
  241. }
  242. function <xsl:value-of select="../../../@name" />_SaveResolvedValues(eventObj)
  243. {    
  244.     var propertyNSPrefix="<xsl:call-template name="PropertyNSPrefix"/>";
  245.     var primaryFieldName="<xsl:value-of select="../../../@name" />";
  246.             <xsl:for-each select="xsd:attribute">
  247.                 <xsl:choose>                    
  248.                     <xsl:when test="@name='RelatedFieldWssStaticName'">
  249.     var RelatedField = <xsl:text>"</xsl:text><xsl:value-of select="@fixed" /><xsl:text>";</xsl:text>
  250.                     </xsl:when>                    
  251.                     <xsl:when test="@name='SecondaryFieldsWssStaticNames'">
  252.     var SecondaryFieldWssNames = <xsl:text>"</xsl:text><xsl:value-of select="@fixed" /><xsl:text>";</xsl:text>
  253.                     </xsl:when>                    
  254.                 </xsl:choose>
  255.             </xsl:for-each>
  256.     <xsl:value-of select="../../../@name"/>_ResolvedValues[0] = eventObj.OldValue;
  257.     var allFields = RelatedField+":"+SecondaryFieldWssNames;
  258.     var boundNodes =allFields.split(":");
  259.     for (fieldCount=0;fieldCount<boundNodes.length;fieldCount++)
  260.     {
  261.         var objElement = eventObj.Source.selectSingleNode("//"+propertyNSPrefix+":"+boundNodes[fieldCount]);
  262.         <xsl:value-of select="../../../@name"/>_ResolvedValues[fieldCount+1] = objElement.text;    
  263.     }
  264. }
  265. function <xsl:value-of select="../../../@name" />_Validator::OnAfterChange(eventObj)
  266. {
  267.     <xsl:for-each select="xsd:attribute">
  268.         <xsl:choose>        
  269.             <xsl:when test="@name='RelatedFieldWssStaticName'">
  270.     var RelatedField = <xsl:text>"</xsl:text><xsl:value-of select="@fixed" /><xsl:text>";</xsl:text>
  271.             </xsl:when>
  272.             <xsl:when test="@name='SecondaryFieldsWssStaticNames'">
  273.     var SecondaryFieldWssNames = <xsl:text>"</xsl:text><xsl:value-of select="@fixed" /><xsl:text>";</xsl:text>
  274.             </xsl:when>
  275.         </xsl:choose>
  276.     </xsl:for-each>
  277.     var propertyNSPrefix="<xsl:call-template name="PropertyNSPrefix"/>";
  278.     <xsl:choose>
  279.         <xsl:when test="not(../../../@nillable) or ../../../@nillable[. != 'true']">
  280.     var isNillable=false;
  281.         </xsl:when> 
  282.         <xsl:otherwise>
  283.     var isNillable=true;
  284.         </xsl:otherwise>
  285.     </xsl:choose>
  286.     if ((eventObj.IsUndoRedo) || (eventObj.Operation == "Delete"))
  287.     {
  288.         return;
  289.     }
  290.     if (eventObj.Site != eventObj.Parent)
  291.     {
  292.         return;
  293.     }
  294.     if (eventObj.Source.nodeType != 3)
  295.     {
  296.         return;
  297.     }
  298.     var attrValue = eventObj.Site.getAttribute("Resolved"); 
  299.     if (!<xsl:value-of select="../../../@name"/>_Resolved)
  300.     {
  301.         var allFields = RelatedField+":"+SecondaryFieldWssNames;
  302.         var boundNodes =allFields.split(":");
  303.         for (fieldCount=0;fieldCount<boundNodes.length;fieldCount++)
  304.         {
  305.             var objElement = eventObj.Source.selectSingleNode("//"+propertyNSPrefix+":"+boundNodes[fieldCount]);
  306.             SetValue(objElement,"");
  307.         }  
  308.         if (eventObj.Site.text == "")
  309.         {
  310.             if (isNillable)
  311.             {
  312.                 if (attrValue != "true")
  313.                 {
  314.                     eventObj.Site.setAttribute("Resolved","true");
  315.                 }
  316.             }
  317.             else
  318.             {
  319.                 if (attrValue != "false")
  320.                 {
  321.                     eventObj.Site.setAttribute("Resolved","false");
  322.                 }
  323.             }
  324.         }
  325.         else
  326.         { 
  327.             if (attrValue != "false")
  328.             {
  329.                 eventObj.Site.setAttribute("Resolved","false");
  330.             }
  331.         }
  332.     }
  333.     else
  334.     {    
  335.         if (attrValue != "true")
  336.         {
  337.             eventObj.Site.setAttribute("Resolved","true");
  338.         }
  339.     }
  340. }
  341. function StripXsiNil(objElement)
  342. {
  343.     if (objElement.getAttribute("xsi:nil"))
  344.     {
  345.         objElement.removeAttribute("xsi:nil");
  346.     }
  347. }
  348. function <xsl:value-of select="../../../@name" />_Validator::OnValidate(eventObj)
  349. {
  350.     var resolved = <xsl:value-of select="../../../@name"/>_Resolved;
  351.     var resolving = <xsl:value-of select="../../../@name"/>_Resolving;
  352.     <xsl:choose>
  353.         <xsl:when test="not(../../../@nillable) or ../../../@nillable[. != 'true']">
  354.     var isNillable=false;
  355.         </xsl:when> 
  356.         <xsl:otherwise>
  357.     var isNillable=true;
  358.         </xsl:otherwise>
  359.     </xsl:choose>
  360.     if ((null == eventObj.XDocument.View))
  361.     {
  362.         XDocument.Errors.Delete(eventObj.Site,"UnResolvedValue");    
  363.         if (eventObj.Site.text == "")
  364.         {
  365.             if(!isNillable)
  366.             {
  367.                 var loadError = <xsl:text>"</xsl:text><xsl:value-of select="$fLocalizedValueCannotBeBlankMessage" /><xsl:text>"</xsl:text>;
  368.                 XDocument.Errors.Add(eventObj.Site,"UnResolvedValue",loadError);
  369.             }
  370.         }
  371.         return;
  372.     }
  373.     if ((eventObj.IsUndoRedo) || (eventObj.Operation == "Delete") || (eventObj.Site != eventObj.Parent) || (eventObj.Source.nodeType != 3))
  374.     {
  375.         return;
  376.     }
  377.     XDocument.Errors.Delete(eventObj.Site,"UnResolvedValue");
  378.     if (!resolved)
  379.     { 
  380.         var error = "";
  381.         if (eventObj.Site.text == "")
  382.         {
  383.             if(isNillable)
  384.             {
  385.                 return;
  386.             }
  387.             else
  388.             {
  389.                 error = <xsl:text>"</xsl:text><xsl:value-of select="$fLocalizedValueCannotBeBlankMessage" /><xsl:text>"</xsl:text>;
  390.             }
  391.         }
  392.         else
  393.         {
  394.             if (resolving)
  395.             {
  396.                 error = <xsl:text>"</xsl:text><xsl:value-of select="$fLocalizedValueCouldNotBeResolvedMessage" /><xsl:text>"</xsl:text>;
  397.             }
  398.             else
  399.             {
  400.                 error = <xsl:text>"</xsl:text><xsl:value-of select="$fLocalizedValueUnresolvedMessage" /><xsl:text>"</xsl:text>;
  401.             }
  402.         }
  403.         XDocument.Errors.Add(eventObj.Site,"UnResolvedValue",error);
  404.     }
  405. }
  406.         </xsl:for-each>
  407.     </xsl:template>
  408.     <xsl:template name="OfflineScripts">
  409.         <xsl:for-each select="//xsd:extension[@base='dms:BusinessDataPrimaryField']">
  410. function <xsl:value-of select="../../../@name" />_Resolver::OnClick(eventObj)
  411. {    
  412.     XDocument.UI.Alert(<xsl:text>"</xsl:text><xsl:value-of select="$fLocalizedDocumentNotAssociatedWithServerMessage" /><xsl:text>"</xsl:text>);
  413. }
  414. function <xsl:value-of select="../../../@name" />_Validator::OnBeforeChange(eventObj)
  415. {
  416.     eventObj.ReturnStatus=false;
  417. }
  418. function <xsl:value-of select="../../../@name" />_Validator::OnAfterChange(eventObj)
  419. {
  420.     eventObj.ReturnStatus=false;
  421. }
  422. function <xsl:value-of select="../../../@name" />_Validator::OnValidate(eventObj)
  423. {
  424.     eventObj.ReturnStatus=false;
  425. }
  426.         </xsl:for-each>
  427.     </xsl:template>
  428.     <xsl:template name="PropertyNSPrefix">
  429.         <xsl:value-of select="local-name($nsDecls[. = current()/ancestor::xsd:schema/@targetNamespace])" />
  430.     </xsl:template>
  431.     <xsl:template name="PropertyNS">
  432.         <xsl:value-of select="current()/ancestor::xsd:schema/@targetNamespace" />
  433.     </xsl:template>
  434. </xsl:stylesheet>
  435.